অ্যাপাচি ফ্লিঙ্ক (Apache Flink)

Streaming এবং Batch SQL এর ব্যবহার

Latest Technologies - অ্যাপাচি ফ্লিঙ্ক (Apache Flink) - Flink SQL এবং ট্যাবুলার API | NCTB BOOK

Apache Flink এ Streaming SQL এবং Batch SQL ব্যবহার করে ডেটা স্ট্রিম এবং ব্যাচ ডেটাসেট উভয়ই প্রসেস করা যায়। Flink SQL এর মাধ্যমে ডেভেলপাররা রিয়েল-টাইম ডেটা স্ট্রিম এবং ঐতিহ্যবাহী ব্যাচ ডেটা প্রসেসিং-এর উপর SQL কিউরি চালাতে পারেন। Flink এর SQL API স্ট্রিম এবং ব্যাচ উভয় প্রক্রিয়ার জন্য একটি ইউনিফাইড ইন্টারফেস প্রদান করে, যা ডেটা প্রসেসিং সহজ এবং শক্তিশালী করে তোলে।

Flink Streaming SQL

Flink এ Streaming SQL হল রিয়েল-টাইম স্ট্রিম ডেটা প্রসেসিং করার জন্য একটি শক্তিশালী টুল। এটি স্ট্রিম ডেটাকে Table হিসেবে উপস্থাপন করে এবং SQL কিউরির মাধ্যমে ডেটার উপর বিভিন্ন ট্রান্সফর্মেশন ও এনালাইসিস করা যায়।

Flink Streaming SQL এর ব্যবহার ধাপসমূহ:

  1. Table Environment তৈরি করা: একটি StreamTableEnvironment তৈরি করতে হবে।
  2. Source টেবিল রেজিস্ট্রেশন: ডেটা সোর্স যেমন Kafka, File, বা অন্য কোনো স্ট্রিম সোর্স থেকে ডেটা পড়তে একটি টেবিল রেজিস্টার করতে হয়।
  3. SQL কিউরি এক্সিকিউশন: SQL কিউরি ব্যবহার করে টেবিলে ডেটা ট্রান্সফর্মেশন এবং এনালাইসিস করা হয়।
  4. Sink টেবিল রেজিস্ট্রেশন: প্রক্রিয়াজাত ডেটাকে সংরক্ষণ করতে একটি সিঙ্ক টেবিল রেজিস্টার করতে হয়।

Streaming SQL উদাহরণ

// 1. Create StreamTableEnvironment
StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
StreamTableEnvironment tableEnv = StreamTableEnvironment.create(env);

// 2. Register a Kafka Source Table
tableEnv.executeSql(
    "CREATE TABLE orders (" +
    "  order_id STRING, " +
    "  product_id STRING, " +
    "  quantity INT, " +
    "  order_time TIMESTAMP(3), " +
    "  WATERMARK FOR order_time AS order_time - INTERVAL '5' SECOND" +
    ") WITH (" +
    "  'connector' = 'kafka', " +
    "  'topic' = 'orders', " +
    "  'properties.bootstrap.servers' = 'localhost:9092', " +
    "  'format' = 'json'" +
    ")"
);

// 3. Execute a Streaming SQL Query
Table result = tableEnv.sqlQuery(
    "SELECT product_id, SUM(quantity) AS total_quantity " +
    "FROM orders " +
    "GROUP BY product_id, TUMBLE(order_time, INTERVAL '1' HOUR)"
);

// 4. Register a Sink Table and write results
tableEnv.executeSql(
    "CREATE TABLE result_sink (" +
    "  product_id STRING, " +
    "  total_quantity BIGINT" +
    ") WITH (" +
    "  'connector' = 'print'" +
    ")"
);

result.executeInsert("result_sink");

এই উদাহরণে:

  • Kafka থেকে ডেটা পড়া হচ্ছে এবং orders নামে একটি সোর্স টেবিল রেজিস্টার করা হয়েছে।
  • SQL কিউরির মাধ্যমে প্রতি ঘন্টায় প্রতিটি product_id এর মোট quantity গণনা করা হচ্ছে।
  • ফলাফল result_sink টেবিলে লেখা হচ্ছে।

Flink Batch SQL

Batch SQL Flink এ ঐতিহ্যবাহী ব্যাচ ডেটা প্রসেসিং করার জন্য ব্যবহৃত হয়। Flink ব্যাচ ডেটাসেটের উপর SQL কিউরি চালাতে পারে এবং প্রয়োজনীয় ট্রান্সফর্মেশন করতে পারে। Flink এর SQL API ব্যাচ প্রসেসিংয়ের জন্যও একই ইন্টারফেস ব্যবহার করে, যা ইউনিফাইড ডেটা প্রসেসিং সিস্টেম তৈরি করে।

Flink Batch SQL এর ব্যবহার ধাপসমূহ:

  1. Table Environment তৈরি করা: একটি TableEnvironment তৈরি করতে হবে।
  2. Batch ডেটা সোর্স রেজিস্ট্রেশন: ফাইল, ডাটাবেস, বা অন্য কোনো ব্যাচ সোর্স থেকে ডেটা পড়ে একটি টেবিল রেজিস্টার করতে হবে।
  3. SQL কিউরি এক্সিকিউশন: ব্যাচ ডেটার উপর SQL কিউরি চালিয়ে প্রয়োজনীয় অপারেশন সম্পন্ন করতে হবে।
  4. ডেটা সিঙ্ক করা: প্রক্রিয়াজাত ডেটাকে আউটপুট সোর্সে সংরক্ষণ করতে হবে।

Batch SQL উদাহরণ

// 1. Create TableEnvironment
EnvironmentSettings settings = EnvironmentSettings.newInstance().inBatchMode().build();
TableEnvironment tableEnv = TableEnvironment.create(settings);

// 2. Register a File Source Table
tableEnv.executeSql(
    "CREATE TABLE sales (" +
    "  sale_id STRING, " +
    "  product_id STRING, " +
    "  quantity INT, " +
    "  sale_date DATE" +
    ") WITH (" +
    "  'connector' = 'filesystem', " +
    "  'path' = 'file:///path/to/sales.csv', " +
    "  'format' = 'csv'" +
    ")"
);

// 3. Execute a Batch SQL Query
Table result = tableEnv.sqlQuery(
    "SELECT product_id, SUM(quantity) AS total_quantity " +
    "FROM sales " +
    "GROUP BY product_id"
);

// 4. Register a Sink Table and write results
tableEnv.executeSql(
    "CREATE TABLE result_sink (" +
    "  product_id STRING, " +
    "  total_quantity BIGINT" +
    ") WITH (" +
    "  'connector' = 'print'" +
    ")"
);

result.executeInsert("result_sink");

এই উদাহরণে:

  • sales নামে একটি ফাইল সোর্স টেবিল রেজিস্টার করা হয়েছে যা একটি CSV ফাইল থেকে ডেটা পড়ছে।
  • SQL কিউরির মাধ্যমে প্রতিটি product_id এর মোট quantity গণনা করা হয়েছে।
  • ফলাফল result_sink টেবিলে লেখা হচ্ছে।

Flink Streaming এবং Batch SQL এর মধ্যে পার্থক্য

বৈশিষ্ট্যStreaming SQLBatch SQL
ডেটা প্রসেসিংক্রমাগত এবং রিয়েল-টাইম ডেটা প্রসেসিংঐতিহ্যবাহী ব্যাচ ডেটা প্রসেসিং
SQL ফাংশনউইন্ডো ফাংশন, অ্যাগ্রিগেশন, টাম্বলিং উইন্ডো, সেশন উইন্ডোস্ট্যান্ডার্ড SQL ফাংশন এবং অ্যাগ্রিগেশন
টেবিল টাইপস্ট্রিম টেবিল (অবিরত পরিবর্তিত হয়)স্থায়ী টেবিল (একবার লোড হয়ে স্থির থাকে)
ইউস কেসরিয়েল-টাইম অ্যানালাইসিস, ইভেন্ট প্রসেসিংঐতিহ্যবাহী ব্যাচ ডেটা এনালাইসিস, রিপোর্টিং

Flink SQL ব্যবহার করার সুবিধা

  1. উচ্চ স্তরের ডেটা প্রসেসিং: SQL ব্যবহার করে ডেটা ট্রান্সফর্মেশন এবং এনালাইসিস করা সহজ, যা ডেভেলপারদের জন্য দ্রুত এবং কার্যকর।
  2. একক ইন্টারফেস: Flink SQL একই ইন্টারফেস ব্যবহার করে স্ট্রিম এবং ব্যাচ উভয় ডেটা প্রসেস করতে পারে, যা ডেটা প্রসেসিংয়ে একীভূত সমাধান প্রদান করে।
  3. ইন্টিগ্রেশন: Flink SQL বিভিন্ন ডেটা সোর্স যেমন Kafka, JDBC, এবং HDFS এর সাথে সহজেই ইন্টিগ্রেট করা যায়।
  4. উচ্চ পারফরম্যান্স: Flink এর অপ্টিমাইজার এবং এক্সিকিউশন ইঞ্জিন SQL কিউরিগুলোকে অপ্টিমাইজ করে দ্রুত এক্সিকিউশন প্রদান করে।

Flink এ Streaming এবং Batch SQL এর মাধ্যমে ডেভেলপাররা সহজে ডেটা প্রসেসিং করতে পারেন এবং ডেটার উপর দ্রুত ও কার্যকরীভাবে কিউরি চালাতে পারেন। এটি বড় আকারের ডেটা প্রসেসিং এবং রিয়েল-টাইম ডেটা এনালাইসিসের জন্য একটি শক্তিশালী টুল।

Promotion